﻿/**
 * 8051虚拟机的实现部分
 *
 * 创建时间：2022年5月13日
 * 作者：李述铜
 * 联系邮箱: 527676163@qq.com
 */
#ifndef SIMU8051_H
#define SIMU8051_H

#include <stdint.h>

// config area
#define MEM_CODE_SIZE       65536           // code size, max 64KB
#define MEM_XRAM_SIZE       65536           // external ram size, max 64KB
#define MEM_IRAM_SIZE       128             // inernal ram + sfr, max 128B
#define MEM_SFR_SIZE        128             // sfr size

/**
 * memory region
 */
typedef struct _memory_t {
    uint8_t * code;
    uint8_t xram[MEM_XRAM_SIZE];
    uint8_t iram[MEM_IRAM_SIZE];
    uint8_t sfr[MEM_SFR_SIZE];
 }memory_t;

/**
 * 8051 simualtor
 */
typedef struct _simu8051_t {
    memory_t mem; 
    uint16_t pc;
}simu8051_t;

/**
 * instruction
 */
typedef struct _instr_t {
    uint8_t opcode;
    uint8_t op0;
    uint8_t op1;
}instr_t;

uint16_t simu8051_pc(void);

void simu8051_init(void);
void simu8051_reset(void);
void simu8051_load (uint8_t * code);
void simu8051_fetch_instr(instr_t * instr);
void simu8051_exec(instr_t * instr);

#endif // !SIMU8051_H
